/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Server;

import Client.Message;


/**
 *Clase Servidor de correo.
 * se encarga de realizar el procesamiento de los correos enviados por 
 * los clientes.
 * @author Devys
 */
public class MailServer {

    private ListaMensajes Mensajes;
    
    /**
     * Constructor por defecto.
     * Se encarga de crear la lista de mensajes en espera vacía.
     */
    public MailServer() {
        Mensajes=new ListaMensajes();
    }
    
    /**
     * Funcion que se encarga de retornar la cantidad de mensajes que un usuario ha recibido
     * como destinatario.
     * @param usuario nombre del cliente destinatario.
     * @return c - cantidad de mensajes recibidos.
     */
    public int getMessagesWaiting(String usuario){
        int cantidad=0;
        for (int indice=0;indice<Mensajes.getCantidadElementos();indice++){
            cantidad=cantidad+compararDestinatario(Mensajes.getMensaje(indice),usuario);
        }
        return cantidad;
    }
    
    /**
     * Funcion que se encarga de retornar el primer mensaje no leido que ha recibido el 
     * usuario
     * @param usuario nombre del usuario destinatario.
     * @return Message - el primer mensaje no leido del usuario.
     */
    public Message getNextMessage(String usuario){
        int indice=0;
        Message mensaje=null;
        while ((indice<Mensajes.getCantidadElementos())&&(mensaje==null)){
            mensaje=obtenerMensajeDestinado(Mensajes.getMensaje(indice), usuario);
            indice++;
        }
        return mensaje;
    }
    
    /**
     * Metodo que se encarga de recibir el mensaje enviado por un cliente y almacenarlo en
     * la lista de mensajes en espera para luego ser remitido al destinatario.
     * @param mensaje 
     */
    public void post(Message mensaje){
        Mensajes.ponerEnEspera(mensaje);
    }
    
    /**
     * Funcion que se encarga comparar el si un usuario es el destinatario de
     * un mensaje determinado.
     * @param mensaje 
     * @param usuario usuario destinatario 
     * @return Message - mensaje destinado al usuario
     */
    private Message obtenerMensajeDestinado(Message mensaje, String usuario){
        String destinatario=mensaje.Obtener_Destinatorio();
        if (destinatario.equals(usuario)){
            Mensajes.eliminarMensaje(mensaje);
            return mensaje;
        }
        return null;
    }

    /**
     * funcion que se encarga comparar el si un usuario es el destinatario de
     * un mensaje determinado.
     * @param mensaje 
     * @param usuario usuario destinatario 
     * @return 1 si el mensaje corresponde al usuario.
     */
    private int compararDestinatario(Message mensaje, String usuario) {
        String destinatario=mensaje.Obtener_Destinatorio();
        if (destinatario.equals(usuario)){
            return 1;
        }
        return 0;
    }
}
